Skip to content

v1.13.0 — mandatory MCP pre-forward audit + challenge approvals (BREAKING)#17

Merged
wyckit merged 1 commit into
masterfrom
feat/v1.13-mandatory-mcp-audit-approval
Jun 21, 2026
Merged

v1.13.0 — mandatory MCP pre-forward audit + challenge approvals (BREAKING)#17
wyckit merged 1 commit into
masterfrom
feat/v1.13-mandatory-mcp-audit-approval

Conversation

@wyckit

@wyckit wyckit commented Jun 21, 2026

Copy link
Copy Markdown
Owner

Makes the v1.12.0 MCP protections mandatory — there is no longer an unsafe path. 246 passing + 3 env-gated skipped.

Breaking

  • McpProxy.GateAndForward throws unless constructed with auditStore + auditKeyProvider — a real MCP side effect can never occur without a signed, persisted record (still fail-closed if the write fails).
  • Supplying approvals without an approvalService throws — no raw-node-id path. An MCP approval is always a server-issued challenge bound to {call fingerprint, tenant, expiry} (MintApprovalChallenge).
  • A pure Gate decision (no forwarding, no approvals) still works without the deps.

Migration

Construct McpProxy with auditStore, auditKeyProvider, approvalService, tenantId; replace any raw "n1" approval with MintApprovalChallenge(call, …). IntentMesh.McpDemo and the IntentMesh.E2E smoke are updated as worked examples.

Tests

New Forwarding_requires_an_audit_sink_and_approvals_require_a_challenge_service asserts both throws + that a pure Gate still works. Test helper + inline forwarding/approval tests updated to wire the deps and approve via minted challenges.

🤖 Generated with Claude Code

…REAKING)

Removes the opt-in/unsafe MCP paths from v1.12.0:
- GateAndForward throws unless constructed with auditStore + auditKeyProvider —
  no real MCP side effect without a signed, persisted record (still fail-closed).
- Supplying approvals without an approvalService throws — no raw-node-id path;
  an MCP approval is always a server-issued challenge bound to {call,tenant,exp}.
- Pure Gate decisions (no forward, no approvals) still work without the deps.

Callers updated: McpDemo + E2E smoke wire the audit store/key/challenge service
and approve via a minted challenge. Test helper Proxy() and inline forwarding/
approval tests updated; new test asserts the throw-on-misuse contract.

246 passing + 3 env-gated skipped.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@wyckit wyckit merged commit 22788c2 into master Jun 21, 2026
2 checks passed
@wyckit wyckit deleted the feat/v1.13-mandatory-mcp-audit-approval branch June 21, 2026 18:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant